package com.example.administrator.utils;

import android.util.Log;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.example.administrator.viewpager.ArticleList;

import java.util.List;
import java.util.Map;

public class AppFastJsonUtils {
    //判断是否是json数据
    public static boolean isJson(String jsonContent) {
        try {
            JSONObject.parseObject(jsonContent);
        } catch (JSONException ex) {
            try {
                JSONObject.parseArray(jsonContent);
            } catch (JSONException ex1) {
                return false;
            }
        }
        return true;
    }

    //============JSON数据和java对象互转========================

    /**
     * 功能描述：把JSON数据转换成指定的java对象
     */
    public static <T> T getJsonToBean(String jsonData, Class<T> clazz) {
        T obj = null;
        try {
            obj = JSON.parseObject(jsonData, clazz);
        } catch (Exception e) {
            Log.i("JSON 解析错误!", "exception:" + e.getMessage() + "" + clazz);
            return null;
        }
        return obj;
    }
    /**
     * 功能描述：把java对象转换成JSON数据
     */
    public static String getBeanToJson(Object object) {
        return JSON.toJSONString(object);
    }

    /**
     * 功能描述：把JSON数据转换成指定的java对象列表
     */
    public static <T> List<T> getJsonToList(String jsonData, Class<T> clazz) {
        return JSON.parseArray(jsonData, clazz);
    }
    /**
     * 功能描述：把JSON数据转换成较为复杂的List<Map<String, Object>>
     *
     * @param jsonData JSON数据
     * @return List<Map < String, Object>>
     */
    public static List<Map<String, Object>> getJsonToListMap(String jsonData) {
        return JSON.parseObject(jsonData, new TypeReference<List<Map<String, Object>>>() {
        });
    }

    /**
     * 功能描述：把JSON数据转换成较为Map<String, Object>
     *
     * @param jsonData JSON数据
     * @return Map < String, Object>
     */
    public static Map<String, Object> getJsonToMap(String jsonData) {
        return JSON.parseObject(jsonData, new TypeReference<Map<String, Object>>() {
        });
    }

    //============JSON数据和JSONObject互转========================
    public static JSONObject getJsonToJSONObject(String jsonData) {
        return JSONObject.parseObject(jsonData);
    }

    public static String getJSONObjectToJson(JSONObject jsonData) {
        return JSONObject.toJSONString(jsonData);
    }

    //============JSON数据和JSONArray互转========================
    public static JSONArray getJsonToJSONArray(String jsonData) {
        return JSONArray.parseArray(jsonData);
//        JSONObject jsonObject1 = (JSONObject)jsonArray.get(0);
//        System.out.println(jsonObject1.get("name"));
    }

    public static String getJSONArrayToJson(JSONArray jsonData) {
        return JSONArray.toJSONString(jsonData);
    }

//    JSONObject 转对象
    public static <T> T getJsonToBean(JSONObject jsonData, Class<T> clazz) {
        T obj = null;
        try {
            obj = JSON.toJavaObject(jsonData, clazz);
        } catch (Exception e) {
            Log.i("JSON 解析错误!", "exception:" + e.getMessage() + "" + clazz);
            return null;
        }
        return obj;
    }
    public static <T> List<T>  getJsonToBean(JSONArray jsonArray, Class<T> clazz) {
        List<T> obj = null;
        try {
//            obj = JSON.toJavaObject(jsonData, clazz);
//            JSONArray jsonArray = JSONArray.parseArray(listStr);
            obj = jsonArray.toJavaList(clazz);
        } catch (Exception e) {
            Log.i("JSON 解析错误!", "exception:" + e.getMessage() + "" + clazz);
            return null;
        }
        return obj;
    }

}
